package com.lemon.utils;

import java.util.List;

import com.github.pagehelper.PageInfo;

/**
 * <p>Title: 结果返回类</p>
 * <p>Description: </p>
 * <p>Company: </p>
 * @author Ran_cc
 * @date 2013年2月14日
 * @版本 V 1.0 
 */
public class ReqResult {

	private int resultCode = 1000;// 返回码
	private Object returnObject;// 返回对象

	public ReqResult() {
	}

	// 系统级错误
	public static final int code_Success = 1000;// 成功
	public static final int code_error = 9999;// 系统异常
	public static final int code_no_permission = 1001;// 无操作权限
	public static final int code_login_error = 1002;// 帐号验证失败
	public static final int code_rand_error = 1003;// 验证码验证失败
	public static final int code_not_login = 1004;// 用户未登录-跳到登录页面
	public static final int code_param_error = 1005;// 参数格式错误
	public static final int code_param_lost = 1006;// 参数缺失
	public static final int code_norole = 1007;// 角色未分配
	public static final int code_exist = 1008;//对象已存在
	public static final int code_not_exist = 1009;//对象不存在
	public static final int code_fail = 1010;//操作失败
	public static final int code_objecr_number = 1011;//对象数量不足
	public static final int code_file_error = 1999;//文件错误

	public static final int code_WAIT_BUYER_PAY = 1012;//等待付款

	// 用户模块错误         code
	public static final int code_user_forbid = 2001;// 禁用/删除用户
	public static final int code_user_existed = 2002;// 

	//角色模块错误          code
	public static final int code_role_forbid = 3001;// 不能删除自己

	/**
	 * @Title: ReqResult
	 * @Description: 封装返回信息
	 * @param returnObject 返回对象
	 * @param resultCode   返回代码
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public ReqResult(Object returnObject , int resultCode) {
		this.resultCode = resultCode;
		this.returnObject = returnObject;
	}

	/**
	 * @Title: ReqResult
	 * @Description: 封装返回信息 默认返回1000代码
	 * @param returnObject 返回对象
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public ReqResult( Object returnObject ) {
		this.resultCode = code_Success;
		this.returnObject = returnObject;
	}

	/**
	 * @Description: 返回带有分页信息的结果集 已废弃
	 * @Title: ReqResult
	 * @param      <T>
	 * @param list 如果是经过pageinfo封装的, 则会返回带有分页信息的list信息 <br>
	 *             如果没有pageinfo,则会返回原本的list
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public <T> ReqResult( List<T> list ) {
		this.resultCode = code_Success;
		if (null != list && list.size() > 0) {
			String typeName = list.getClass().getTypeName();
			if (typeName.equals("com.github.pagehelper.Page")) {
				this.returnObject = new PageInfo<T>(list);
			} else {
				this.returnObject = list;
			}
		} else {
			this.returnObject = list;
		}
	}

	/**
	 * @Description: 返回带有分页信息的结果集 已废弃
	 * @Title: ReqResult
	 * @param      <T>
	 * @param list 如果是经过pageinfo封装的, 则会返回带有分页信息的list信息 <br>
	 *             如果没有pageinfo,则会返回原本的list
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public <T> ReqResult(List<T> list , int resultCode) {
		this.resultCode = resultCode;
		if (null != list && list.size() > 0) {
			String typeName = list.getClass().getTypeName();
			if (typeName.equals("com.github.pagehelper.Page")) {
				this.returnObject = new PageInfo<T>(list);
			} else {
				this.returnObject = list;
			}
		} else {
			this.returnObject = list;
		}
	}
	



	public Object getReturnObject() {
		return returnObject;
	}

	/**
	 * <b>Description:<em><blockquote>
	 * 此方法不会封装list分页信息
	 * </blockquote></em></b>
	 */
	public void setReturnObject(Object returnObject) {
		this.returnObject = returnObject;
	}

	public int getResultCode() {
		return this.resultCode;
	}

	public void setResultCode(int resultCode) {
		this.resultCode = resultCode;
	}

	/**
	 * <b>Description:<blockquote> 封装返回信息, 默认为成功
	 * </blockquote></b>
	 * 
	 * @Title: setReturnResult
	 * @param returnObject
	 * @author Ran_cc
	 * @date 2018年6月23日
	 */
	public void setReturnResult(Object returnObject) {
		this.returnObject = returnObject;
		this.resultCode = ReqResult.code_Success;
	}

	/**
	 * <b>Description:<blockquote> 封装返回信息, 默认为成功
	 * </blockquote></b>
	 * 
	 * @Title: setReturnResult
	 * @param returnObject
	 * @author Ran_cc
	 * @date 2018年6月23日
	 */
	public void setReturnResult(Object returnObject , int resultCode) {
		this.returnObject = returnObject;
		this.resultCode = resultCode;
	}

	/**
	 * @Description: 返回带有分页信息的结果集
	 * @Title: ReqResult
	 * @param      <T>
	 * @param list 如果是经过pageinfo封装的, 则会返回带有分页信息的list信息 <br>
	 *             如果没有pageinfo,则会返回原本的list
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public <T> void setReturnResult(List<T> list , int resultCode) {
		this.resultCode = resultCode;
		if (null != list && list.size() > 0) {
			String typeName = list.getClass().getTypeName();
			if (typeName.equals("com.github.pagehelper.Page")) {
				this.returnObject = new PageInfo<T>(list);
			} else {
				this.returnObject = list;
			}
		} else if (null != list && list.size() == 0) {
			this.returnObject = null;
		} else {
			this.returnObject = list;
		}
	}

	/**
	 * @Description: 返回带有分页信息的结果集 , 默认返回1000
	 * @Title: ReqResult
	 * @param      <T>
	 * @param list 如果是经过pageinfo封装的, 则会返回带有分页信息的list信息 <br>
	 *             如果没有pageinfo,则会返回原本的list
	 * @author Ran_cc
	 * @date 2018年5月30日
	 */
	public <T> void setReturnResult(List<T> list) {
		this.resultCode = ReqResult.code_Success;
		if (null != list && list.size() > 0) {
			String typeName = list.getClass().getTypeName();
			if (typeName.equals("com.github.pagehelper.Page")) {
				this.returnObject = new PageInfo<T>(list);
			} else {
				this.returnObject = list;
			}
		} else if (null != list && list.size() == 0) {
			this.returnObject = null;
		} else {
			this.returnObject = list;
		}
	}

}
